/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author marduke
 */
package server;

import RmiInterface.Nodos;
import RmiInterface.NodosImpl;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.rmi.Naming;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Vector;

public class Nodo {

    public Nodo(int puerto,Vector<String> vecinos,String DirArchivo) {


        try {
            Nodos n = new NodosImpl(vecinos,DirArchivo);
            Naming.rebind("rmi://localhost:"+puerto+"/NodosService", n);

        } catch (Exception e) {
            System.out.println("Trouble: " + e);
        }
    }

    public static void main(String[] args) {

        int puerto = 2004;
        String maquinas = "";
        String archivoTraza = "";
        String directorio = "";
        Vector<String> vectorMaquinas =  new Vector<String>();
        File archivos[] = new File[1];
        Vector<String> vectorArchivos = new Vector<String>();
        BufferedWriter traza;

        if (args.length != 8) {
            System.out.println("Error en los argumentos.\n "
                    + "Uso: \n"
                    + "nodo -p <puerto> -f <maquinas> -l <archivoTrazas> -d "
                    + "<directorio> \nDonde:  \n"
                    + "<puerto>: es el puerto por el cual estará escuchando el"
                    + " servidor.\n <maquinas>: es el nombre dela rchivo donde"
                    + " estaran especificados los nombre o direcciones IP de "
                    + "los nodos vecinos.\n"
                    + "<archivoTrazas>: nombre del archivo de texto donde el "
                    + "servidor escribirá la información sobre las operaciones "
                    + "realizadas: consultas recibidas, de quien"
                    + " las recibi,o, peticion de archivos.\n"
                    + "<directorio>: nombre del directoria donde estaran los "
                    + "archivos JPG y XML que representan las fotos, como se "
                    + "explicó anteriormente.");
        } else {

            for (int i = 0; i < args.length; i = i + 2) {
                if (args[i].compareTo("-p") == 0) {
                    puerto = Integer.parseInt(args[i + 1]);
                } else if (args[i].compareTo("-f") == 0) {
                    maquinas = args[i + 1];
                } else if (args[i].compareTo("-l") == 0) {
                    archivoTraza = args[i + 1];
                } else if (args[i].compareTo("-d") == 0) {
                    directorio = args[i + 1];
                } else {
                    System.out.println("Argumento inválido " + args[i]);
                    System.exit(-1);
                }
            }

            try {
                Scanner vecinos = new Scanner(new File(maquinas));
                while (vecinos.hasNext()) {
                    vectorMaquinas.add(vecinos.next());

                }

            } catch (FileNotFoundException fileExepction) {
                System.out.println("El archivo de maquinas no existe.");
            }


            try {
                File dirFile = new File(directorio);
                if (dirFile.exists()) {
                    if (dirFile.isDirectory()) {
                        // System.out.println("Es un directorio");
                        archivos = dirFile.listFiles();
                    } else {
                        //System.out.println("No es un directorio");
                    }
                } else {
                    dirFile.mkdir();
                    archivos = dirFile.listFiles();
                }

                for (int i = 0; i < archivos.length; i++) {
                    File file = archivos[i];
                    String nFile = file.getName();
                    String hola[];
                    if (nFile.contains(".xml")) {
                        hola = nFile.split(".xml");
                        vectorArchivos.add(hola[0]);
                    }
                }

            } catch (Exception e) {
            }


            new Nodo(puerto, vectorMaquinas,directorio);

        }

    }

}